home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 63.zip / BS1 part 63 / Video Tracker dev. kit d1.adf / Source / Object.s < prev    next >
Text File  |  1993-08-09  |  44KB  |  2,292 lines

  1. rout            ;when this is off, the routine-file will be
  2.             ;assembled, on=testing
  3.             
  4. ;debug            ;when this is on, colors in the background will
  5.             ;show how much time the routine needs.
  6.  
  7.  
  8. routinemode    equ    14431    ;the routinemode !
  9.  
  10.  
  11. ; the first part of the source handles the things that are necessary to
  12. ; show the picture/copper and playing of the routine.
  13. ; the part between the "***" lines is the routine-source.
  14. ; at the bottom of the file, there are the necessary incbin-files who
  15. ; are needed to test the routine.
  16. ; these are saved with "save effect" in videotracker. they are raw
  17. ; data files which can be fonts,pictures,landscapes,vectorobjects
  18. ; etcetra.
  19. ; the incbin-files are put in the "variables" table, in the routine-
  20. ; player-handler
  21. ; the place where it's done can be found by searching for "!!!"
  22.  
  23.  
  24.     opt    a+    ;devpac 3 optimize
  25.     opt    o+
  26.  
  27.     ifd    rout
  28.     
  29.     ;videotracker routine-test
  30.  
  31.     incdir    "videotracker:include/"
  32.     include    "exec/types.i"
  33.     include    "graphics/gfxbase.i"
  34.     include    "lvo/graphics_lib.i"
  35.     incdir    'videotracker:effect/'
  36.  
  37. vew_wid    equ    44
  38. vew_hgt    equ    290
  39. win_hgt    equ    117
  40. win_str    equ    $1a
  41.  
  42.     SECTION    1,CODE_C
  43. tus
  44.     lea    var,a0            ;communication-table
  45.  
  46.     move.l    #rotincobj,var_obj1(a0)    ;incbinfile !!!
  47.     move.l    #rotincbck,var_bck(a0)    ;incbinfile !!!
  48.  
  49.  
  50.     move.l    ($4).w,a6
  51.     sub.l    a1,a1
  52.     jsr    -$126(a6)        ;findtask
  53.     move.l    d0,curtsk
  54.     move.l    d0,a0
  55.     move.l    $b8(a0),tskpri
  56.  
  57.     lea    dosnam,a1        ;doslib openen
  58.     moveq.l    #0,d0
  59.     move.l    (4).w,a6
  60.     jsr    -408(a6)        ;openlib
  61.     move.l    d0,doslib
  62.  
  63.     bsr.s    label5            ;videotracker opstarten
  64.     
  65.     move.l    curtsk,a0
  66.     move.l    tskpri,$b8(a0)
  67.     move.l    ($4).w,a6
  68.     jsr    -$84(a6)        ;forbid
  69.  
  70.     move.l    doslib,a1
  71.     move.l    (4).w,a6
  72.     jsr    -414(a6)        ;closelib
  73.  
  74.     moveq.l    #0,d0
  75.     rts
  76.     
  77. label5
  78.     move.l    (4).w,a6        ;workbench gedoe
  79.     move.b    530(a6),ntscmode    ;50/60 hertz halen
  80.  
  81.     cmp.b    #50,ntscmode        ;ntsc ?
  82.     beq.s    str.ntsc
  83.     move.l    #vew_hgt-56,hogscr    ;set NTSC screen hight
  84. str.ntsc
  85.  
  86.     move.l    (4).w,a6        ;68030 cache off 
  87.     jsr    -120(a6)
  88.  
  89.     btst.b    #1,297(a6)
  90.     beq.s    str.nfc
  91.     lea.l    str.ft,a5
  92.     jsr    -30(a6)
  93. str.nfc
  94.     jsr    -126(a6)
  95.     bra.s    str.fc
  96.     
  97. str.ft
  98.     dc.w    $4e7a,2
  99.     bclr    #0,d0
  100.     bset    #13,d0
  101.     dc.w    $4e7b,2
  102.     rte
  103. str.fc
  104.  
  105.     lea    cprjmp,a2        ;copjmp zetten !
  106.     move.l    #cprbck-8,d0
  107.     move.w    d0,6(a2)
  108.     swap    d0
  109.     move.w    d0,2(a2)
  110.  
  111.     lea    cprbck-8,a2        ;copstr zetten !
  112.     move.l    #cpr,d0
  113.     move.w    d0,6(a2)
  114.     swap    d0
  115.     move.w    d0,2(a2)
  116.  
  117.     bsr    cprsprrem        ;sprites legen
  118.  
  119.     lea    gfxnam,a1        ;graphics lib openen
  120.     move.l    (4).w,a6
  121.     jsr    -408(a6)        ;openlib
  122.     move.l    d0,a6
  123.     move.l    d0,gfxlib
  124.     move.l    38(a6),oldcprlist
  125.  
  126.     bset    #1,$bfe001
  127.     bsr    copbuf            ;copper vullen
  128.  
  129.     bsr    sysoff
  130.  
  131. gadrun
  132.     btst    #6,($bfe001).l
  133.     bne    gadrun
  134.  
  135. scrend
  136. scrend.play
  137.     bsr    syson
  138.  
  139.     move.l    gfxlib,a1
  140.     move.l    (4).w,a6
  141.     jsr    -414(a6)        ;closelib
  142.  
  143. scrend.qb
  144.     moveq.l    #0,d0    
  145.     rts
  146.     
  147.     ;vertical blank interrupt, no blits.
  148.     ;handles counters,interlace,sprite
  149.     ;level 3
  150.  
  151. intvb
  152.     bra.s    intvb.cnt
  153.     dc.l    'VIDU'
  154.     dc.l    'LOOP'
  155. intvb.cnt
  156.     movem.l    d0-d7/a0-a6,-(sp)
  157.     lea    ($dff000).l,a6
  158.  
  159.     move.w    $01e(a6),d0
  160.     btst    #5,d0            ;vblank ?
  161.     bne.s    intvb.vb
  162.  
  163.     bra.s    intcop.end
  164.  
  165. intvb.vb
  166.     bsr    grap
  167.     bsr    palctr            ;palette zetten
  168.     bsr.s    copbuf            ;copper vullen
  169.     
  170. intvb.end
  171.     move.w    #$0020,$09c(a6)    ;vb bit wissen
  172.     movem.l    (sp)+,d0-d7/a0-a6    ;multitask uit, shit !
  173.     rte
  174.  
  175. intcop.end
  176.     movem.l    (sp)+,d0-d7/a0-a6
  177.     move.l    intvbold,-(sp)
  178.     rts
  179.  
  180.     ;transmission buffer empty routine, BLIT !
  181.     ;handles routines,animations
  182.     
  183. inttbe                    ;tbe interrupt
  184.     movem.l    d0-d7/a0-a6,-(sp)
  185.     lea    ($dff000).l,a6
  186.  
  187.     move.w    $01e(a6),d0
  188.     btst    #0,d0            ;no tbe ?
  189.     beq.s    intdskblk
  190.  
  191.  
  192.     btst    #6,($bfe001).l        ;muis ingedrukt ?
  193.     beq.s    inttbe.cop
  194.     btst    #2,($dff016).l
  195.     beq.s    inttbe.cop
  196.  
  197.     ifd    debug
  198.     move.w    #$700,$dff180
  199.     endc
  200.     
  201.     bsr    rotply            ;routineplayer BLIT !
  202.     bsr.s    copbuf            ;copper vullen
  203.  
  204.     ifd    debug
  205.     move.w    #$070,$dff180
  206.     endc
  207.     
  208. inttbe.cop
  209.  
  210. inttbe.end
  211.     move.w    #$0001,$09c(a6)
  212.     movem.l    (sp)+,d0-d7/a0-a6
  213.     rte
  214.  
  215. intdskblk
  216.     move.w    #$0001,$09c(a6)        ;be sure for no tbe handling
  217.     movem.l    (sp)+,d0-d7/a0-a6
  218.     move.l    inttbeold,-(sp)
  219.     rts
  220.  
  221.  
  222.     ;moves the copperbuffer to the copperlist
  223.     ;sort of double buffering
  224.     
  225. copbuf
  226.     movem.l    d0-d7/a0-a6,-(sp)
  227.  
  228.     lea    ($dff000).l,a6
  229.  
  230. copbuf.novb                ;copperchange overslaan
  231.     moveq.l    #0,d0
  232.     move.b    $005(a6),d0
  233.     lsl.w    #8,d0
  234.     moveq.l    #0,d1
  235.     move.b    $006(a6),d1
  236.     add.w    d1,d0
  237.  
  238.     cmp.w    #$4,d0
  239.     blt    copbuf.novb
  240.  
  241.     cmp.b    #50,ntscmode
  242.     beq.s    copbuf.pal
  243.     cmp.w    #$133-56-8,d0        ;ntsc grens
  244.     bge    copbuf.novb
  245.     bra.s    copbuf.cont
  246. copbuf.pal
  247.     cmp.w    #$133-8,d0        ;pal grens
  248.     bge    copbuf.novb
  249. copbuf.cont
  250.  
  251.     lea    gra.s,a0        ;buffer copieren
  252.     lea    cprbuf,a1
  253.  
  254.     move.w    00*4+2(a0),00*4+2(a1)
  255.     move.w    01*4+2(a0),01*4+2(a1)
  256.     move.w    02*4+2(a0),02*4+2(a1)
  257.     move.w    03*4+2(a0),03*4+2(a1)
  258.     move.w    04*4+2(a0),04*4+2(a1)
  259.     move.w    05*4+2(a0),05*4+2(a1)
  260.     move.w    06*4+2(a0),06*4+2(a1)
  261.     move.w    07*4+2(a0),07*4+2(a1)
  262.     move.w    08*4+2(a0),08*4+2(a1)
  263.     move.w    09*4+2(a0),09*4+2(a1)
  264.  
  265.     move.w    10*4+2(a0),10*4+2(a1)
  266.     move.w    11*4+2(a0),11*4+2(a1)
  267.     move.w    12*4+2(a0),12*4+2(a1)
  268.     move.w    13*4+2(a0),13*4+2(a1)
  269.     move.w    14*4+2(a0),14*4+2(a1)
  270.     move.w    15*4+2(a0),15*4+2(a1)
  271.     move.w    16*4+2(a0),16*4+2(a1)
  272.     move.w    17*4+2(a0),17*4+2(a1)
  273.     move.w    18*4+2(a0),18*4+2(a1)
  274.     move.w    19*4+2(a0),19*4+2(a1)
  275.  
  276.     move.w    20*4+2(a0),20*4+2(a1)
  277.     move.w    21*4+2(a0),21*4+2(a1)
  278.     move.w    22*4+2(a0),22*4+2(a1)
  279.     move.w    23*4+2(a0),23*4+2(a1)
  280.     move.w    24*4+2(a0),24*4+2(a1)
  281.     move.w    25*4+2(a0),25*4+2(a1)
  282.     move.w    26*4+2(a0),26*4+2(a1)
  283.     move.w    27*4+2(a0),27*4+2(a1)
  284.     move.w    28*4+2(a0),28*4+2(a1)
  285.     move.w    29*4+2(a0),29*4+2(a1)
  286.  
  287.     move.w    30*4+2(a0),30*4+2(a1)
  288.     move.w    31*4+2(a0),31*4+2(a1)
  289.     move.w    32*4+2(a0),32*4+2(a1)
  290.     move.w    33*4+2(a0),33*4+2(a1)
  291.     move.w    34*4+2(a0),34*4+2(a1)
  292.     move.w    35*4+2(a0),35*4+2(a1)
  293.     move.w    36*4+2(a0),36*4+2(a1)
  294.     move.w    37*4+2(a0),37*4+2(a1)
  295.     move.w    38*4+2(a0),38*4+2(a1)
  296.     move.w    39*4+2(a0),39*4+2(a1)
  297.  
  298.     move.w    40*4+2(a0),40*4+2(a1)
  299.     move.w    41*4+2(a0),41*4+2(a1)
  300.     move.w    42*4+2(a0),42*4+2(a1)
  301.     move.w    43*4+2(a0),43*4+2(a1)
  302.     move.w    44*4+2(a0),44*4+2(a1)
  303.     move.w    45*4+2(a0),45*4+2(a1)
  304.     move.w    46*4+2(a0),46*4+2(a1)
  305.     move.w    47*4+2(a0),47*4+2(a1)
  306.     move.w    48*4+2(a0),48*4+2(a1)
  307.     move.w    49*4+2(a0),49*4+2(a1)
  308.  
  309.     move.w    50*4+2(a0),50*4+2(a1)
  310.     move.w    51*4+2(a0),51*4+2(a1)
  311.     move.w    52*4+2(a0),52*4+2(a1)
  312.     move.w    53*4+2(a0),53*4+2(a1)
  313.     move.w    54*4+2(a0),54*4+2(a1)
  314.  
  315. copbuf.end
  316.     movem.l    (sp)+,d0-d7/a0-a6
  317.     rts
  318.  
  319.     ;goes back to the workbench
  320.     
  321. syson
  322.     movem.l    d0-d7/a0-a6,-(sp)
  323.  
  324.     move.w    #$0001,$dff09a        ;tbeint uit
  325.     move.l    intvbold,($6c).w
  326.     move.l    inttbeold,($64).w
  327.  
  328.     move.l    4,a6
  329.     jsr    -138(a6)        ;permit
  330.  
  331.     move.l    gfxlib,a6
  332.     jsr    -462(a6)        ;disownblitter
  333.  
  334.     move.l    wbview,a1
  335.     move.l    gfxlib,a6
  336.     jsr    _LVOLoadView(a6)     ; Fix view
  337.     jsr    _LVOWaitTOF(a6)
  338.     jsr    _LVOWaitTOF(a6)         ; wait for LoadView()
  339.  
  340. syson.ras
  341.     cmp.b    #$c0,$dff006        ;prevent copperjump
  342.     bne    syson.ras
  343.  
  344.     move.l    gfxlib,a6
  345.     move.l    gb_copinit(a6),$dff080     ; Kick it into life
  346.  
  347.     movem.l    (sp)+,d0-d7/a0-a6
  348.     rts
  349.     
  350.     ;goes back to the gadgetscreen
  351.     
  352. sysoff
  353.     movem.l    d0-d7/a0-a6,-(sp)
  354.      
  355.     move.l    gfxlib,a6
  356.     move.l    gb_ActiView(a6),wbview    ;current view
  357.     sub.l    a1,a1            ; clear a1
  358.     jsr     _LVOLoadView(a6)     ; Flush View to nothing
  359.     jsr    _LVOWaitTOF(a6)     ; Wait once
  360.     jsr    _LVOWaitTOF(a6)     ; Wait again.
  361.  
  362.     move.l    gfxlib,a6
  363.     jsr    -456(a6)        ;ownblitter
  364.  
  365.     move.l    4,a6
  366.     jsr    -132(a6)        ;forbid
  367.         
  368.     move.l    ($6c).w,intvbold
  369.     move.l    #intvb,($6c).w
  370.     move.l    ($64).w,inttbeold
  371.     move.l    #inttbe,($64).w
  372.     move.w    #$8001,$dff09a        ;tbeint aan
  373.     bsr    gracpr            ;reset copper
  374.     bsr    copbuf            ;copy copper
  375.     move.l    #cpr,$dff080
  376.  
  377.     movem.l    (sp)+,d0-d7/a0-a6
  378.     rts
  379.     
  380. cprsprrem
  381.     movem.l    d0-d7/a0-a6,-(sp)
  382.     lea    cprspr,a0
  383.     move.l    #sprdat,d0
  384.     move.w    #7,d1
  385. cprsprrem.a
  386.     move.w    d0,3*2(a0)
  387.     swap    d0
  388.     move.w    d0,1*2(a0)
  389.     swap    d0
  390.     add.l    #8,a0
  391.     dbra    d1,cprsprrem.a
  392.     movem.l    (sp)+,d0-d7/a0-a6
  393.     rts
  394.  
  395. varset                    ;variablen neerzetten
  396.     movem.l    d0-d7/a0-a6,-(sp)
  397.     move.l    #var,a0
  398.  
  399.     move.l    #cprbck,var_cprbck(a0)
  400.     move.l    gfxlib,var__GfxBase(a0)
  401.     move.b    ntscmode,var_ntsc(a0)
  402.  
  403.     move.l    curpic1,var_pic1(a0)    ;variabel
  404.     move.l    curpic2,var_pic2(a0)    ;variabel
  405.     move.w    anispd1,var_anispd1(a0)
  406.     move.w    anitel1,var_anitel1(a0)
  407.     movem.l    (sp)+,d0-d7/a0-a6
  408.     rts
  409.     
  410.     ;this routine handles all videotracker-routines
  411.  
  412. rotply    
  413.     movem.l    d0-d7/a0-a6,-(sp)
  414.  
  415.     moveq.l    #0,d0
  416.  
  417.     lea    currot1,a2        ;routine 1
  418.     move.w    rotinf1,d0        ;routine info
  419.     bsr.s    rotplyr
  420.  
  421. rotply.end
  422.     movem.l    (sp)+,d0-d7/a0-a6
  423.     rts
  424.  
  425.     ;this routine handles 1 routine, BLIT !
  426.     
  427. rotplyr
  428.     movem.l    d0-d7/a1-a6,-(sp)
  429.  
  430.     move.l    #rot,(a2)        ;routinestart address
  431.  
  432.     move.b    #50,ntscmode        ;ntsc/pal hz
  433.     clr.l    curpic2            ;background picture
  434.     move.w    #1,anispd1        ;animationspeed
  435.     clr.w    anitel1            ;animation position
  436.  
  437.     lea    var,a0            ;communication-table
  438.  
  439. ;    move.l    #rotincobj,var_obj1(a0)    ;incbinfile !!!
  440. ;    move.l    #rotincbck,var_bck(a0)    ;incbinfile !!!
  441.  
  442.     move.l    #routinemode,d0        ;routinemode !!!
  443.  
  444.     sub.l    a0,a0            ;picture info legen
  445.  
  446.     tst.l    (a2)            ;is er een routine ?
  447.     beq    rotplyr.end        ;interlace handling
  448.  
  449.     move.l    intdel,d2        ;delay
  450.     move.l    inttel,d1        ;teller
  451.     cmp.w    d2,d1
  452.     blt    rotplyr.end
  453.     clr.l    inttel
  454.                 
  455.     bsr    varset            ;variabelen updaten
  456.  
  457.     move.l    (a2),a1            ;routine halen
  458.     move.l    #var,a0            ;variablen tabel
  459.  
  460.     movem.l    d3-d7/a1-a6,-(sp)
  461.     moveq.l    #0,d1            ;vars wissen
  462.     moveq.l    #0,d2
  463.     moveq.l    #0,d3
  464.     moveq.l    #0,d4
  465.     moveq.l    #0,d5
  466.     moveq.l    #0,d6
  467.     moveq.l    #0,d7
  468.     sub.l    a2,a2
  469.     sub.l    a3,a3
  470.     sub.l    a4,a4
  471.     sub.l    a5,a5
  472.  
  473.     jsr    4(a1)            ;routine afwerken
  474.     movem.l    (sp)+,d3-d7/a1-a6
  475.  
  476.     ;Routine:
  477.     ;
  478.     ;Input:
  479.     ;a0=variabelentabel
  480.     ;d0=routinemode
  481.     ;
  482.     ;Output:
  483.     ;a0=picture
  484.     ;d1=copperlist
  485.     ;d2=interruptdelay        (NOT used till now)
  486.     
  487.     move.w    #$0020,$dff09a        ;vb off !
  488.  
  489.     move.l    d2,intdel        ;delay
  490.  
  491.     lea    cprjmp,a3
  492.     move.l    #cprbck-8,d0
  493.  
  494.     cmp.l    (a2),a1            ;routine ondertussen gewipt ?
  495.     bne.s    rotplyr.nocop
  496.     tst.l    d1            ;copperlist ?
  497.     beq.s    rotplyr.nocop
  498.     move.l    d1,d0
  499. rotplyr.nocop
  500.     move.w    d0,6(a3)
  501.     swap    d0
  502.     move.w    d0,2(a3)
  503.  
  504.     cmp.l    #0,a0            ;picture ?
  505.     beq.s    rotplyr.endvb
  506.  
  507.     move.l    a0,curpic1        ;current picture (cycle)
  508.     move.l    a0,curpal1        ;current palette
  509.  
  510.     tst.b    rotdpl            ;plane is geleverd
  511.     beq.s    rotplyr.set
  512.     clr.b    rotdpl
  513.     clr.l    cycdel1            ;cycle info wissen
  514.     clr.l    4+cycdel1
  515.     clr.l    curfrm1            ;curfrm1, altijd planes zetten
  516. rotplyr.set
  517.     clr.b    dplctr
  518.     bsr.s    grap
  519.     bsr    grac            ;colorset
  520. rotplyr.endvb
  521.     move.w    #$8020,$dff09a
  522. rotplyr.end
  523.     movem.l    (sp)+,d0-d7/a1-a6
  524.     rts
  525.  
  526.     ;removes possible routine-coppers
  527.     
  528. gracpr
  529.     movem.l    d0-d7/a0-a6,-(sp)
  530.     lea    cprjmp,a3
  531.     move.l    #cprbck-8,d0        ;copperlist resetten
  532.     move.w    d0,6(a3)
  533.     swap    d0
  534.     move.w    d0,2(a3)
  535.     movem.l    (sp)+,d0-d7/a0-a6
  536.     rts
  537.  
  538.     ;picture-to-copper routine, communicates with the
  539.     ;anim-player
  540.     
  541. grap                    ;d7=anim
  542.     movem.l    d0-d7/a0-a6,-(sp)
  543.  
  544.     clr.l    d7
  545.     
  546.     tst.l    curpic1            ;current picture ?
  547.     beq    grap.end
  548.  
  549.     move.l    curpic1,a2        ;normal pic halen
  550.  
  551.     lea    gracprscr,a1        ;window neerzetten
  552.     move.l    hogscr,d1
  553.  
  554.     move.w    pic_hgt(a2),d3        ;pic hoogte
  555.     move.w    pic_vew(a2),d5
  556.     btst    #2,d5            ;interlace ?
  557.     beq.s    grap.nohi4
  558.     lsr.w    #1,d3            ;/2
  559. grap.nohi4
  560.     cmp.w    d3,d1
  561.     bge.s    grap.hog
  562.     move.w    d1,d3
  563. grap.hog
  564.     sub.w    d3,d1
  565.     lsr.w    #1,d1
  566.     add.w    #win_str,d1
  567.     move.w    d1,d2
  568.     add.w    d3,d2
  569.  
  570.  
  571.     move.b    d1,2(a1)        ;y start
  572.     move.b    d2,6(a1)        ;y end
  573.  
  574.     move.w    pic_wid(a2),d4        ;pic breedte in bytes
  575.     lsl.l    #3,d4
  576.  
  577.     move.l    #vew_wid*8,d0
  578.     move.l    #0,d1
  579.     move.l    #$71,d6
  580.  
  581.     move.w    pic_vew(a2),d5
  582.     btst    #15,d5            ;hires ?
  583.     beq.s    grap.nohi2
  584.  
  585.     move.l    #(vew_wid-4)*8*2,d0
  586.     move.l    #1,d1
  587.     move.l    #$81,d6
  588.  
  589.     cmp.w    #80,pic_wid(a2)        ;overscan ?
  590.     ble.s    grap.nohi2
  591.     move.l    #(vew_wid)*8*2,d0
  592.     move.l    #$61,d6
  593.  
  594. grap.nohi2    
  595.     btst    #6,d5            ;super hires ?
  596.     beq.s    grap.noshi2
  597.  
  598.     move.l    #(vew_wid-4)*8*4,d0
  599.     move.l    #2,d1
  600.     move.l    #$81,d6
  601.  
  602.     cmp.w    #80*2,pic_wid(a2)    ;overscan ?
  603.     ble.s    grap.noshi2
  604.     move.l    #(vew_wid)*8*4,d0
  605.     move.l    #$61,d6
  606.  
  607. grap.noshi2    
  608.  
  609.     clr.w    d5
  610.     cmp.w    d0,d4            ;breeder dan scherm ?
  611.     ble.s    grap.c
  612.     move.w    d4,d5
  613.     move.w    d0,d4
  614.     sub.w    d0,d5            ;modulo
  615.     lsr.w    #3,d5            ;/8
  616. grap.c
  617.     lsr.w    d1,d0
  618.     lsr.w    d1,d4
  619.  
  620.     move.w    d0,d2
  621.     sub.w    d4,d2
  622.     lsr.w    #1,d2            ;/2
  623.  
  624.     add.w    d6,d2
  625.     move.b    d2,3(a1)        ;x start
  626.     move.w    d2,d3            ;d3 bewaren !
  627.  
  628.     add.w    d4,d2            ;d4 bewaren !
  629.     move.b    d2,7(a1)        ;x end
  630.     
  631.     move.w    pic_vew(a2),d6
  632.     btst    #15,d6            ;hires ?
  633.     beq.s    grap.nohi5    
  634.     add.l    d4,d4            ;*2
  635. grap.nohi5
  636.     btst    #6,d6            ;super hires ?
  637.     beq.s    grap.noshi5    
  638.     add.l    d4,d4            ;*4
  639. grap.noshi5
  640.  
  641.     move.l    d7,-(sp)
  642.     move.w    pic_vew(a2),d6
  643.     move.l    #17,d0
  644.     move.l    #1,d1
  645.     move.l    #3,d7
  646.  
  647.     btst    #15,d6            ;hires ?
  648.     beq.s    grap.nohi3    
  649.     move.l    #9,d0
  650.     move.l    #2,d1
  651.     move.l    #2,d7
  652. grap.nohi3
  653.     btst    #6,d6            ;super hires ?
  654.     beq.s    grap.noshi3    
  655.     move.l    #9,d0
  656.     move.l    #2,d1
  657.     move.l    #1,d7
  658. grap.noshi3
  659.     sub.w    d0,d3
  660.     lsr.w    #1,d3
  661.     move.w    d3,10(a1)        ;ddfstrt
  662.     
  663.     move.w    d4,d2            ;pic breedte in pixels
  664.     lsr.w    #4,d2            ;/16
  665.     sub.w    d1,d2            ;-1
  666.  
  667.     lsl.w    d7,d2            ;*8
  668.     add.w    d2,d3
  669.     move.w    d3,14(a1)        ;ddfstop
  670.     move.l    (sp)+,d7
  671.     
  672.     lea    pic_raw(a2),a0
  673.  
  674.     moveq.l    #0,d2
  675.     move.w    pic_dpt(a2),d2
  676.     sub.l    #1,d2
  677.     muls    pic_wid(a2),d2
  678.     add.w    d2,d5
  679.  
  680.     move.w    pic_vew(a2),d2        ;viewmode add
  681.     btst    #2,d2
  682.     beq.s    grap.nolace4
  683.  
  684.     moveq.l    #0,d2
  685.     move.w    pic_dpt(a2),d2
  686.     muls    pic_wid(a2),d2
  687.     add.w    d2,d5            ;interlace gedoe
  688. grap.nolace4
  689.  
  690.     lea    gracprbpl,a4        ;iffpln neerzetten
  691.     lea    gracprpln,a0        ;iffpln neerzetten
  692.     moveq.l    #0,d2
  693.     move.w    pic_dpt(a2),d2        ;plnnummer 1 halen
  694.     move.l    #8,d6            ;copper step !
  695.  
  696.     tst.l    curpic2            ;2de picture ?
  697.     bne.s    grap.pic2
  698. grap.nopic2
  699.     move.w    d5,34(a1)        ;modulo oneven zetten
  700.     bra    grap.nodpl
  701. grap.pic2
  702.     move.l    curpic2,a3        ;oneven plane
  703.     move.l    currot2,a5        ;oneven plane
  704.     clr.l    curpic2            ;mischien niet goed
  705.     clr.l    curpal2            ;mischien niet goed
  706.     clr.l    currot2            ;mischien niet goed
  707.  
  708.     cmp.l    curpic1,a3        ;picture hetzelfde ?
  709.     beq    grap.nopic2
  710.     
  711.     cmp.l    #0,currot1        ;routine ?    
  712.     beq.s    grap.norot
  713.     cmp.l    currot1,a5        ;routine hetzelfde ?
  714.     beq    grap.nopic2
  715. grap.norot
  716.  
  717.     cmp.b    #3,d2            ;> 8 kleuren ?
  718.     bgt    grap.nopic2
  719.     move.w    pic_dpt(a3),d3        ;plnnummer 2 halen
  720.     cmp.b    d2,d3            ;gelijke plnummers ?
  721.     bne    grap.nopic2
  722.     move.w    pic_vew(a2),d1
  723.     cmp.w    pic_vew(a3),d1        ;view gelijk ?
  724.     bne    grap.nopic2
  725.  
  726.     move.w    pic_vew(a2),d1        ;groter dan view test
  727.     btst    #6,d1            ;super hires ?
  728.     beq.s    grap.nohi2a
  729.     move.l    #vew_wid*4,d1
  730.     bra.s    grap.nohi2b
  731. grap.nohi2a
  732.     btst    #15,d1            ;hires ?
  733.     beq.s    grap.noshi2a
  734.     move.l    #vew_wid*2,d1
  735.     bra.s    grap.nohi2b
  736. grap.noshi2a
  737.     move.l    #vew_wid,d1
  738. grap.nohi2b
  739.     cmp.w    pic_wid(a2),d1        ;breder dan view ?
  740.     bgt.s    grap.small
  741.     cmp.w    pic_wid(a3),d1        ;breder dan view ?
  742.     bgt.s    grap.small
  743.  
  744.     move.w    pic_vew(a2),d1
  745.     btst    #2,d1
  746.     beq.s    grap.nolace8a
  747.     move.l    hogscr,d1
  748.     add.l    d1,d1
  749.     bra.s    grap.nolace8b
  750. grap.nolace8a
  751.     move.l    hogscr,d1
  752. grap.nolace8b
  753.     cmp.w    pic_hgt(a2),d1        ;hoger dan view ?
  754.     bgt.s    grap.small
  755.     cmp.w    pic_hgt(a3),d1        ;hoger dan view ?
  756.     bgt.s    grap.small
  757.     bra.s    grap.big
  758.  
  759. grap.small
  760.     move.w    pic_hgt(a2),d1        ;wid+hgt<vew
  761.     cmp.w    pic_hgt(a3),d1        ;hoogte gelijk ?
  762.     bne    grap.nopic2
  763.     move.w    pic_wid(a2),d1
  764.     cmp.w    pic_wid(a3),d1        ;breedte gelijk ?
  765.     bne    grap.nopic2
  766.  
  767. grap.big
  768.     move.l    a3,curpic2
  769.     move.l    a3,curpal2
  770.     move.l    a5,currot2
  771.  
  772.     tst.b    dplctr            ;double playfield al gezet ?
  773.     beq.s    grap.nocop
  774.  
  775.     move.w    30(a1),34(a1)        ;modulo copieren
  776.  
  777.     move.w    2(a4),d1        ;bplcon0
  778.     btst    #10,d1            ;al double playfield ?
  779.     beq.s    grap.ta
  780.  
  781.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  782.     move.w    6(a0),14(a0)
  783.  
  784.     move.w    18(a0),26(a0)        ;plane 2>3 copieren
  785.     move.w    22(a0),30(a0)
  786.  
  787.     move.w    34(a0),42(a0)        ;plane 4>5 copieren
  788.     move.w    38(a0),46(a0)
  789.  
  790.     bra.s    grap.tb
  791. grap.ta
  792.     move.w    18(a0),42(a0)        ;plane 2>5 copieren
  793.     move.w    22(a0),46(a0)
  794.  
  795.     move.w    10(a0),26(a0)        ;plane 1>3 copieren
  796.     move.w    14(a0),30(a0)
  797.  
  798.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  799.     move.w    6(a0),14(a0)
  800.  
  801. grap.tb
  802.     move.l    #palette,a3        ;palette copieren
  803.  
  804.     move.w    #8-1,d1
  805. grap.pal
  806.     move.w    (a3)+,14(a3)
  807.     dbra    d1,grap.pal
  808.  
  809. grap.nocop
  810.     add.w    d3,d2
  811.     lsl.w    #8,d2
  812.     lsl.w    #4,d2
  813.     or.w    #$400,d2
  814.     move.w    d2,2(a4)        ;bplcon0
  815.  
  816.     movem.l    d0-d7/a0-a6,-(sp)
  817.  
  818.     move.l    curpic,a2        ;animpic ?
  819.     move.l    curfrm,d7
  820.     cmp.l    #0,a2
  821.     bne.s    grap.noanipic
  822.  
  823.     move.l    curpic2,a2        ;normal pic ?
  824.     move.l    curfrm2,d7
  825.     cmp.l    #0,a2
  826.     beq.s    grap.nodplpic
  827.  
  828. grap.noanipic
  829.     add.l    d6,a0
  830.     add.w    d6,d6
  831.     bsr.s    grappln            ;a2,d6,d7,d0
  832. grap.nodplpic
  833.     movem.l    (sp)+,d0-d7/a0-a6
  834.     add.w    d6,d6
  835.     bra.s    grap.nodpla
  836.  
  837.  
  838. grap.nodpl                ;geen double playfield
  839.     lsl.w    #8,d2
  840.     lsl.w    #4,d2
  841.     move.w    d2,2(a4)        ;bplcon0
  842.  
  843. grap.nodpla
  844.     move.w    d5,30(a1)        ;modulo even
  845.  
  846.     moveq.l    #0,d3
  847.     add.w    pic_vew(a2),d3        ;viewmode add
  848.     moveq.l    #0,d2
  849.     move.w    2(a4),d2
  850.     or.l    d3,d2
  851.     or.l    #$300,d2        ;genlock info
  852.     move.w    d2,2(a4)
  853.     
  854.     bsr.s    grappln            ;a2,d6,d7,d0
  855.  
  856. grap.end
  857.     
  858.     movem.l    (sp)+,d0-d7/a0-a6
  859.     rts
  860.         
  861.  
  862.     ;sets on of the 2 possible pictures to the copper
  863.     ;handles interlace
  864.  
  865.     ;d7=framenummer
  866.     ;d6=copperliststap
  867.     ;d0=raw planes positie
  868.     ;a2=current picture
  869. grappln                    ;planes invullen 
  870.     movem.l    d0-d7/a0-a6,-(sp)
  871.  
  872.     lea    pic_raw(a2),a1
  873.     move.l    a1,d0            ;raw planes
  874.     
  875.     moveq.l    #0,d2            ;x*y
  876.     move.w    pic_wid(a2),d2
  877.     lsr.l    #1,d2            ;/2
  878.     moveq.l    #0,d3
  879.     move.w    pic_hgt(a2),d3
  880.     muls    d3,d2
  881.     
  882.     move.l    d2,d4
  883.     add.l    d2,d2
  884.  
  885.     move.w    pic_dpt(a2),d3
  886.     muls    d3,d4            ;hele picture size
  887.     muls    d7,d4            ;frame*size d7 !
  888.  
  889.     add.l    d4,d4
  890.  
  891.     add.l    d4,d0
  892.  
  893.     move.l    #vew_wid,d5        ;max x view
  894.     move.l    hogscr,d4        ;max y view
  895.     move.w    pic_vew(a2),d1        ;viewmode add
  896.     btst    #2,d1
  897.     beq.s    grappln.nolace
  898.     add.l    d4,d4            ;max y view
  899. grappln.nolace
  900.     btst    #15,d1            ;hires ?
  901.     beq.s    grappln.nohi
  902.     move.l    #vew_wid*2,d5        ;max x view
  903. grappln.nohi
  904.     btst    #6,d1            ;super hires ?
  905.     beq.s    grappln.noshi
  906.     move.l    #vew_wid*4,d5        ;max x view
  907. grappln.noshi
  908.  
  909.     moveq.l    #0,d3            ;scherm centreren
  910.     move.w    pic_wid(a2),d3        ;pic breedte in bytes
  911.     cmp.w    d5,d3            ;breder dan scherm ?
  912.     ble.s    grappln.qa
  913.     sub.w    d5,d3            ;-scherm breedte
  914.     lsr.w    #2,d3            ;/4
  915.  
  916.     add.l    d3,d3
  917.  
  918.     add.l    d3,d0
  919. grappln.qa
  920.     move.w    pic_hgt(a2),d3        ;pic hoogte in bytes
  921.     cmp.w    d4,d3            ;hoger dan scherm ?
  922.     ble.s    grappln.qb
  923.     sub.w    d4,d3            ;-scherm breedte
  924.     lsr.w    #1,d3            ;/2
  925.     moveq.l    #0,d5
  926.     move.w    pic_wid(a2),d5        ;pic breedte in bytes
  927.     muls    pic_dpt(a2),d5
  928.     muls    d5,d3
  929.     add.l    d3,d0
  930. grappln.qb
  931.     moveq.l    #0,d2
  932.     move.w    pic_wid(a2),d2
  933.  
  934.     move.w    pic_vew(a2),d5        ;interlace flipping ?
  935.     btst    #2,d5
  936.     beq.s    grappln.nolac7b
  937.  
  938.     move.w    $04(a6),d5        ;even/oneven ?
  939.     btst    #15,d5
  940.     beq.s    grappln.nolac7b
  941.     
  942.     moveq.l    #0,d3
  943.     move.w    pic_wid(a2),d3
  944.     muls    pic_dpt(a2),d3
  945.     add.l    d3,d0
  946. grappln.nolac7b
  947.  
  948.     move.w    pic_dpt(a2),d1        ;plnnummer 1 halen
  949.     tst.w    d1            ;0 planes ?
  950.     beq.s    grappln.end
  951.     sub.w    #1,d1
  952. grappln.a
  953.     move.w    d0,3*2(a0)
  954.     swap    d0
  955.     move.w    d0,1*2(a0)
  956.     swap    d0
  957.     add.l    d6,a0            ;d6=copper step !
  958.     add.l    d2,d0
  959.     dbra    d1,grappln.a
  960. grappln.end
  961.     movem.l    (sp)+,d0-d7/a0-a6
  962.     rts
  963.  
  964.     ;sets palettes to copper
  965.     
  966. grac
  967.     movem.l    d0-d7/a0-a6,-(sp)
  968.  
  969.     lea    curpal1,a3        ;palette 1
  970.     move.l    #palette,a1
  971.     bsr.s    gracfrm
  972.  
  973.     lea    curpal2,a3        ;palette 2 (dpl)
  974.     move.l    #8*2+palette,a1
  975.     bsr.s    gracfrm
  976.     
  977.     bsr.s    palctr            ;palette-buffer to copper
  978. grac.end
  979.     movem.l    (sp)+,d0-d7/a0-a6
  980.     rts
  981.         
  982.     ;moves palette from picture to palette-buffer
  983.  
  984. gracfrm
  985.     movem.l    d0-d7/a0-a6,-(sp)
  986.     tst.l    (a3)            ;palette aanwezig ?
  987.     beq.s    gracfrm.end
  988.  
  989.     move.l    (a3),a2            ;current palette
  990.     
  991.     cmp.l    #'PALE',(a2)        ;palette ?
  992.     bne.s    gracfrm.pict
  993.     lea    6(a2),a0        ;palette
  994.     move.w    4(a2),d0        ;aantal kleuren
  995.     bra.s    gracfrm.col
  996. gracfrm.pict
  997.     cmp.l    #'ANIM',(a2)        ;animatie ?
  998.     bne.s    gracfrm.noanim
  999.  
  1000.     moveq.l    #0,d1
  1001.     move.w    pic_ani(a2),d1
  1002.     bclr    #7,d1            ;behandelbit weghalen
  1003.  
  1004.     moveq.l    #0,d3
  1005.     move.w    pic_wid(a2),d3
  1006.     lsr.w    #1,d3            ;/2
  1007.     muls    pic_hgt(a2),d3
  1008.     muls    pic_dpt(a2),d3
  1009.  
  1010.     add.l    d3,d3
  1011.  
  1012.     add.l    #pic_raw,d3
  1013.     move.l    d3,d5
  1014.  
  1015.     btst    #0,d1
  1016.     bne.s    gracfrm.buf2
  1017.     moveq.l    #0,d5
  1018. gracfrm.buf2
  1019.     add.l    d5,a2
  1020. gracfrm.noanim
  1021.     lea    pic_pal(a2),a0        ;palette
  1022.     move.w    pic_palnum(a2),d0
  1023.  
  1024.     cmp.w    #32-1,d0        ;niet meer dan 32 kleuren
  1025.     ble    gracfrm.sub
  1026.     move.w    #32-1,d0
  1027. gracfrm.sub
  1028.  
  1029.     tst.w    d0            ;0 planes ?
  1030.     beq.s    gracfrm.end
  1031. gracfrm.col
  1032. gracfrm.fa
  1033.     move.w    (a0)+,(a1)+
  1034.     dbra    d0,gracfrm.fa
  1035. gracfrm.end
  1036.     movem.l    (sp)+,d0-d7/a0-a6
  1037.     rts
  1038.     
  1039.     ;handles colorcycling in the palette-buffer
  1040.     ;and copies palette-buffer to copper
  1041.  
  1042. palctr
  1043.     movem.l    d0-d7/a0-a6,-(sp)
  1044.  
  1045.     move.l    curpic1,a2        ;current raw
  1046.     cmp.l    #0,a2
  1047.     beq.s    palctr.qb
  1048.     lea    cycdel1,a3        ;cycle delays
  1049.     move.l    #palette,a4
  1050.     bsr    palcyc
  1051. palctr.qb
  1052.     move.l    curpic2,a2        ;current raw
  1053.     cmp.l    #0,a2
  1054.     beq.s    palctr.c
  1055.     lea    cycdel2,a3        ;cycle delays
  1056.     move.l    #8*2+palette,a4
  1057.     bsr    palcyc
  1058.  
  1059. palctr.c
  1060.     lea    gracprcol,a1
  1061.     move.l    #palette,a0
  1062.  
  1063.     move.w    00(a0),00*4+2(a1)
  1064.     move.w    02(a0),01*4+2(a1)
  1065.     move.w    04(a0),02*4+2(a1)
  1066.     move.w    06(a0),03*4+2(a1)
  1067.     move.w    08(a0),04*4+2(a1)
  1068.     move.w    10(a0),05*4+2(a1)
  1069.     move.w    12(a0),06*4+2(a1)
  1070.     move.w    14(a0),07*4+2(a1)
  1071.     move.w    16(a0),08*4+2(a1)
  1072.     move.w    18(a0),09*4+2(a1)
  1073.  
  1074.     move.w    20(a0),10*4+2(a1)
  1075.     move.w    22(a0),11*4+2(a1)
  1076.     move.w    24(a0),12*4+2(a1)
  1077.     move.w    26(a0),13*4+2(a1)
  1078.     move.w    28(a0),14*4+2(a1)
  1079.     move.w    30(a0),15*4+2(a1)
  1080.     move.w    32(a0),16*4+2(a1)
  1081.     move.w    34(a0),17*4+2(a1)
  1082.     move.w    36(a0),18*4+2(a1)
  1083.     move.w    38(a0),19*4+2(a1)
  1084.  
  1085.     move.w    40(a0),20*4+2(a1)
  1086.     move.w    42(a0),21*4+2(a1)
  1087.     move.w    44(a0),22*4+2(a1)
  1088.     move.w    46(a0),23*4+2(a1)
  1089.     move.w    48(a0),24*4+2(a1)
  1090.     move.w    50(a0),25*4+2(a1)
  1091.     move.w    52(a0),26*4+2(a1)
  1092.     move.w    54(a0),27*4+2(a1)
  1093.     move.w    56(a0),28*4+2(a1)
  1094.     move.w    58(a0),29*4+2(a1)
  1095.  
  1096.     move.w    60(a0),30*4+2(a1)
  1097.     move.w    62(a0),31*4+2(a1)
  1098.  
  1099.     movem.l    (sp)+,d0-d7/a0-a6
  1100.     rts
  1101.  
  1102.     ;colorcyclinghandling of a palette
  1103.  
  1104. palcyc
  1105.     movem.l    d0-d7/a0-a6,-(sp)
  1106.     move.w    #4-1,d7            ;4 cycles
  1107. palcyc.d
  1108.     tst.w    (a3)+            ;delay klaar ?
  1109.     bne.s    palcyc.c
  1110.     
  1111.     moveq.l    #0,d1
  1112.     move.b    pic_cycstr(a2),d1    ;start color
  1113.     lsl.b    #1,d1        ;*2
  1114.  
  1115.     moveq.l    #0,d2
  1116.     move.b    pic_cycend(a2),d2    ;end color
  1117.     lsl.b    #1,d2        ;*2
  1118.  
  1119.     moveq.l    #0,d3
  1120.     move.b    pic_cycadd(a2),d3    ;richting
  1121.  
  1122.     move.l    a4,a0            ;palette pointer
  1123.     move.l    a0,a1
  1124.     add.l    d1,a0            ;startcolor
  1125.     add.l    d2,a1            ;endcolor
  1126.     
  1127.     cmp.b    #1,d3            ;omhoog
  1128.     beq.s    palcyc.up
  1129.     cmp.b    #3,d3            ;omlaag
  1130.     beq.s    palcyc.down
  1131.     bra.s    palcyc.i
  1132.  
  1133. palcyc.up                ;kleuren copieren
  1134.     move.w    (a1),d4            ;laatst color bewaren
  1135. palcyc.f                ;kleuren copieren
  1136.     cmp.l    a0,a1
  1137.     beq.s    palcyc.fa
  1138.     move.w    -(a1),2(a1)
  1139.     bra    palcyc.f
  1140. palcyc.fa
  1141.     move.w    d4,(a1)
  1142.     bra.s    palcyc.g    
  1143.     
  1144. palcyc.down
  1145.     move.w    (a0),d4            ;laatst color bewaren
  1146. palcyc.h                ;kleuren copieren
  1147.     cmp.l    a0,a1
  1148.     beq.s    palcyc.ha
  1149.     move.w    2(a0),(a0)+
  1150.     bra    palcyc.h
  1151. palcyc.ha
  1152.     move.w    d4,(a1)
  1153.  
  1154. palcyc.g
  1155.     move.b    pic_cycspd(a2),-1(a3)    ;delay zetten
  1156.     bra.s    palcyc.i
  1157. palcyc.c
  1158.     sub.w    #1,-2(a3)        ;cycle delay aftellen
  1159. palcyc.i
  1160.     add.l    #4,a2            ;next cycle info
  1161.     dbra    d7,palcyc.d
  1162.  
  1163. palcyc.qb
  1164.     movem.l    (sp)+,d0-d7/a0-a6
  1165.     rts
  1166.  
  1167.  
  1168. ;    SECTION    variabelen,DATA_c
  1169.  
  1170.     cnop    0,2
  1171. curtsk        dc.l    0
  1172. tskpri        dc.l    0
  1173. duplok        dc.l    0
  1174. inttel        dc.l    0
  1175. intdel        dc.l    0
  1176.  
  1177. form        dc.l    0
  1178. ifffil        dc.l    0
  1179. intvbold    dc.l    0
  1180. inttbeold    dc.l    0
  1181. patpos        dc.l    0
  1182. gfxlib        dc.l    0
  1183. doslib        dc.l    0
  1184. wbview      dc.l    0
  1185. mt_data        dc.l    0
  1186. memvid        dc.l    0
  1187. oldcprlist    dc.l    0
  1188. hogscr        dc.l    vew_hgt
  1189.  
  1190. inspos        dc.l    -1
  1191. anispd1        dc.w    1    ;nooit op 0 !
  1192. anispd2        dc.w    1
  1193.  
  1194.         cnop    0,2
  1195. varclr.s            ;start wissen
  1196. oldrot        dc.l    0
  1197. curpic        dc.l    0
  1198. curfrm        dc.l    0
  1199. cycdel1        ds.w    4
  1200. cycdel2        ds.w    4
  1201.  
  1202. rotinf1        dc.w    0
  1203. rotinf2        dc.w    0
  1204.  
  1205. effspd        dc.w    0
  1206. efflop        dc.b    0
  1207. anilop1        dc.b    0
  1208. anilop2        dc.b    0
  1209. anipal1        dc.b    0
  1210. anipal2        dc.b    0
  1211. rotdpl        dc.b    1
  1212. dplctr        dc.b    0
  1213.         cnop    0,2
  1214.  
  1215. insdat        ds.l    4
  1216. inspri        dc.l    0
  1217. instel        dc.w    0
  1218.  
  1219. cureff        dc.l    0
  1220. efftel        dc.w    0
  1221.  
  1222. curpal1        dc.l    0
  1223. curpal2        dc.l    0
  1224. currot1        dc.l    0
  1225. currot2        dc.l    0
  1226. curpic1        dc.l    0
  1227. curpic2        dc.l    0
  1228. anitel1        dc.w    0
  1229. anitel2        dc.w    0
  1230. curfrm1        dc.l    0
  1231. curfrm2        dc.l    0
  1232. oldfrm1        dc.l    0
  1233. oldfrm2        dc.l    0
  1234.  
  1235. varclr.e
  1236.         dc.l    0            ;wisruimte
  1237.     
  1238. varclr.ql    equ    varclr.e-varclr.s    ;wislengte
  1239.     
  1240. ;ownblit    dc.b    0
  1241. ntscmode    dc.b    0
  1242. end        dc.b    0
  1243.  
  1244. pronam    dc.b    'VideoTracker',0
  1245.     cnop    0,2
  1246. dosnam    dc.b    'dos.library',0
  1247.     cnop    0,4
  1248. gfxnam    dc.b    'graphics.library',0
  1249.     cnop    0,4
  1250.     
  1251.     cnop    0,4
  1252. gra.s
  1253. gracprscr
  1254.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1255. gracprbpl
  1256.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1257.     dc.w    $108,$0000,$10a,$0000
  1258. gracprpln
  1259.     dc.w    $e0,$0000,$e2,$0000
  1260.     dc.w    $e4,$0000,$e6,$0000
  1261.     dc.w    $e8,$0000,$ea,$0000
  1262.     dc.w    $ec,$0000,$ee,$0000
  1263.     dc.w    $f0,$0000,$f2,$0000
  1264.     dc.w    $f4,$0000,$f6,$0000
  1265. gracprcol
  1266.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1267.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1268.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1269.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1270. cprjmp
  1271.     dc.w    $080,0,$082,0
  1272. gra.e
  1273. gra.ql    equ    gra.e-gra.s        ;block lengte
  1274.  
  1275.  
  1276. cpr
  1277.     dc.w    $0001,$fffe
  1278.     dc.w    $09c,$8001        ;tbeint
  1279. cprspr
  1280.     dc.w    $120,$0000,$122,$0000
  1281.     dc.w    $124,$0000,$126,$0000
  1282.     dc.w    $128,$0000,$12a,$0000
  1283.     dc.w    $12c,$0000,$12e,$0000
  1284.     dc.w    $130,$0000,$132,$0000
  1285.     dc.w    $134,$0000,$136,$0000
  1286.     dc.w    $138,$0000,$13a,$0000
  1287.     dc.w    $13c,$0000,$13e,$0000
  1288.  
  1289. cprbuf
  1290.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1291.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1292.     dc.w    $108,$0000,$10a,$0000
  1293.     dc.w    $e0,$0000,$e2,$0000
  1294.     dc.w    $e4,$0000,$e6,$0000
  1295.     dc.w    $e8,$0000,$ea,$0000
  1296.     dc.w    $ec,$0000,$ee,$0000
  1297.     dc.w    $f0,$0000,$f2,$0000
  1298.     dc.w    $f4,$0000,$f6,$0000
  1299.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1300.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1301.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1302.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1303.     dc.w    $080,0,$082,0
  1304. cprbuf.e
  1305.  
  1306.     dc.w    $088,$0000        ;copjmp2
  1307.     dc.w    $080,0,$082,0        ;moet achter cprbck blijven !
  1308. cprbck
  1309. sprdat
  1310.     dc.w    $ffff,$fffe
  1311.  
  1312.  
  1313. prf_pat    equ    7            ;pref sample size
  1314. prf_patnum    equ    128        ;aantal songpos's
  1315. prf_len    equ    ((prf_pat*prf_patnum)+1)
  1316.  
  1317. prf_pos    equ    0            ;eff position (teller)
  1318.  
  1319. prf_effs    equ    1        ;start effect (*prf_patnum)
  1320. prf_effe    equ    2        ;end effect   (*prf_patnum)
  1321. prf_pri    equ    3            ;priority     (*prf_patnum)
  1322. prf_spd    equ    4            ;eff speed    (*prf_patnum)
  1323. prf_ani    equ    5            ;ani speed    (*prf_patnum)
  1324. prf_roth    equ    6        ;routine info (*prf_patnum)
  1325. prf_rotl    equ    7        ;routine info (*prf_patnum)
  1326.  
  1327. eff_num    equ    256            ;aantal effects
  1328.  
  1329. pic_wid        equ    4        ;wide in bytes
  1330. pic_hgt        equ    6        ;hoogte
  1331. pic_dpt        equ    8        ;number planes
  1332. pic_ani        equ    10        ;aantal effes (anim)
  1333. pic_vew        equ    12        ;viewmode
  1334. pic_cycstr    equ    14        ;cycle start (*4)
  1335. pic_cycend    equ    15        ;cycle end (*4)
  1336. pic_cycspd    equ    16        ;cycle speed (*4)
  1337. pic_cycadd    equ    17        ;cycle add (*4)
  1338. pic_palnum    equ    30        ;aantal kleuren
  1339. pic_pal        equ    32        ;palette start
  1340. pic_palsiz    equ    256*2        ;vaste palette size
  1341. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1342.  
  1343. fil_namlen    equ    24        ;naamlengte
  1344. fil_len    equ    (fil_namlen+4+4)    ;effect info length
  1345. fil_num    equ    2+eff_num        ;aantal files
  1346. fil_fil    equ    0            ;file naam 
  1347. fil_dir    equ    24            ;pointer naar directory
  1348. fil_pnt    equ    28            ;pointer naar meminfo
  1349.  
  1350. palette    ds.w    64    ;palette
  1351.  
  1352. var_len        equ    $300        ;lengte vartabel
  1353.  
  1354. var__GfxBase    equ    $000        ;graphics lib
  1355. var_pic1    equ    $004        ;current picture
  1356. var_anispd1    equ    $008        ;animspeed
  1357. var_anitel1    equ    $00c        ;animspeed
  1358. var_cprbck    equ    $010        ;copperback
  1359. var_bck        equ    $014        ;background
  1360. var_pic2    equ    $018        ;current picture
  1361. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1362. var_lnd        equ    $020        ;landscape
  1363. var_txt1    equ    $040        ;text
  1364. var_txt16    equ    15*4+var_txt1
  1365. var_vec1    equ    $080        ;vectors
  1366. var_vec16    equ    15*4+var_vec1
  1367. var_fon1    equ    $0c0        ;fonts
  1368. var_fon16    equ    15*4+var_fon1
  1369. var_cols1    equ    $100        ;colorsets
  1370. var_cols16    equ    15*4+var_cols1
  1371. var_obj1    equ    $180        ;objects
  1372. var_obj16    equ    15*4+var_obj1
  1373.  
  1374.     cnop    0,2
  1375. var    ds.b    $300    ;variabelen voor routines
  1376.  
  1377.     
  1378. ;    SECTION    10,CODE_C
  1379.         endc
  1380.  
  1381. ; this is the routine-source
  1382. ;**********************************************************************
  1383.  
  1384.         ifnd    rout
  1385. pic_wid        equ    4        ;wide in bytes
  1386. pic_hgt        equ    6        ;hoogte
  1387. pic_dpt        equ    8        ;number planes
  1388. pic_ani        equ    10        ;aantal effes (anim)
  1389. pic_vew        equ    12        ;viewmode
  1390. pic_cycstr    equ    14        ;cycle start (*4)
  1391. pic_cycend    equ    15        ;cycle end (*4)
  1392. pic_cycspd    equ    16        ;cycle speed (*4)
  1393. pic_cycadd    equ    17        ;cycle add (*4)
  1394. pic_palnum    equ    30        ;aantal kleuren
  1395. pic_pal        equ    32        ;palette start
  1396. pic_palsiz    equ    256*2        ;vaste palette size
  1397. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  1398.  
  1399. var_len        equ    $300        ;lengte vartabel
  1400.  
  1401. var__GfxBase    equ    $000        ;graphics lib
  1402. var_pic1    equ    $004        ;current picture
  1403. var_anispd1    equ    $008        ;animspeed
  1404. var_anitel1    equ    $00c        ;animspeed
  1405. var_cprbck    equ    $010        ;copperback
  1406. var_bck        equ    $014        ;background
  1407. var_pic2    equ    $018        ;current picture
  1408. var_ntsc    equ    $01c        ;ntsc/pal frequence
  1409. var_lnd        equ    $020        ;landscape
  1410. var_txt1    equ    $040        ;text
  1411. var_txt16    equ    15*4+var_txt1
  1412. var_vec1    equ    $080        ;vectors
  1413. var_vec16    equ    15*4+var_vec1
  1414. var_fon1    equ    $0c0        ;fonts
  1415. var_fon16    equ    15*4+var_fon1
  1416. var_cols1    equ    $100        ;colorsets
  1417. var_cols16    equ    15*4+var_cols1
  1418. var_obj1    equ    $180        ;objects
  1419. var_obj16    equ    15*4+var_obj1
  1420.  
  1421. vew_wid    equ    44
  1422. vew_hgt    equ    290
  1423. win_hgt    equ    117
  1424. win_str    equ    $1a
  1425.         endc
  1426.  
  1427. ;    Input:
  1428. ;    a0=variabelen tabel
  1429. ;    d0=routinfo
  1430.  
  1431. ;    Output:
  1432. ;    a0=picture
  1433.  
  1434.  
  1435. rot_vewh    equ    0    ;$8000
  1436. rot_vewl    equ    0    ;$4
  1437. rot_dpt        equ    1
  1438.  
  1439.     ifeq    rot_vewl-0
  1440. rot_shgt    equ    290+128
  1441. rot_bhgt    equ    290
  1442. rot_ystp    equ    32
  1443.     endc
  1444.     ifeq    rot_vewl-$4
  1445. rot_shgt    equ    (2*290)+128
  1446. rot_bhgt    equ    2*290
  1447. rot_ystp    equ    32*2
  1448.     endc
  1449.  
  1450.     ifeq    rot_vewh-0
  1451. rot_swid    equ    (368+128)/8
  1452. rot_bwid    equ    368/8
  1453. rot_xstp    equ    32
  1454. rot_cen    equ    0
  1455.     ifeq    rot_dpt-1
  1456. rot_blit    equ    1        ;aantal blits
  1457.     endc
  1458.     ifeq    rot_dpt-2
  1459. rot_blit    equ    1        ;aantal blits
  1460.     endc
  1461.     ifeq    rot_dpt-3
  1462. rot_blit    equ    1        ;aantal blits
  1463.     endc
  1464.     ifeq    rot_dpt-4
  1465. rot_blit    equ    2        ;aantal blits
  1466.     endc
  1467.     ifeq    rot_dpt-5
  1468. rot_blit    equ    2        ;aantal blits
  1469.     endc
  1470.     ifeq    rot_dpt-6
  1471. rot_blit    equ    2        ;aantal blits
  1472.     endc
  1473.     endc
  1474.  
  1475.     ifeq    rot_vewh-$8000
  1476. rot_swid    equ    ((368*2)+128)/8
  1477. rot_bwid    equ    (368*2)/8
  1478. rot_xstp    equ    32*2
  1479. rot_cen    equ    4
  1480.     ifeq    rot_dpt-1
  1481. rot_blit    equ    1        ;aantal blits
  1482.     endc
  1483.     ifeq    rot_dpt-2
  1484. rot_blit    equ    2        ;aantal blits
  1485.     endc
  1486.     ifeq    rot_dpt-3
  1487. rot_blit    equ    2        ;aantal blits
  1488.     endc
  1489.     ifeq    rot_dpt-4
  1490. rot_blit    equ    2        ;aantal blits
  1491.     endc
  1492.     endc
  1493.         
  1494.  
  1495. rot_objnum    equ    32
  1496.  
  1497.     SECTION    3,CODE_C
  1498.  
  1499. rot
  1500.     dc.l    'ROUT'
  1501.     movem.l    d1-d7/a1-a6,-(sp)
  1502.  
  1503.     lea    ($dff000).l,a6    ;hardware
  1504.     lea    rot,a5        ;prog base
  1505.  
  1506.     move.w    #%1111111111111111,$044(a6)
  1507.     move.w    #%1111111111111111,$046(a6)
  1508.  
  1509.     move.l    d0,d7        ;info
  1510.  
  1511.     tst.l    var_bck(a0)        ;nieuwe background ?
  1512.     beq    rot.c
  1513.     move.l    var_bck(a0),a1
  1514.     clr.l    var_bck(a0)
  1515.     
  1516.     clr.l    rotbckpln-rot(a5)    ;background wissen
  1517.  
  1518.     lea    rotpal1,a3        ;palette altijd copieren
  1519.     move.l    a3,a4
  1520.     add.l    #rotpic2-rotpic1,a4
  1521.  
  1522.     lea    pic_pal(a1),a2    ;palette
  1523.     move.w    pic_palnum(a1),d0
  1524.  
  1525. rot.g
  1526.     move.w    (a2),(a3)+
  1527.     move.w    (a2)+,(a4)+
  1528.     dbra    d0,rot.g
  1529.  
  1530.     bsr    rotcln        ;alle objects uit
  1531.  
  1532.     cmp.w    #rot_bwid,pic_wid(a1)    ;size check
  1533.     bne    rot.clean
  1534.     cmp.w    #rot_bhgt,pic_hgt(a1)    ;background ?
  1535.     bne    rot.clean
  1536.     cmp.w    #rot_dpt,pic_dpt(a1)    ;background ?
  1537.     bne    rot.clean
  1538.  
  1539.     lea    pic_raw(a1),a2
  1540.     move.l    a2,rotbckpln-rot(a5)
  1541.     
  1542.     lea    ((rot_shgt-rot_bhgt)/2*rot_swid*rot_dpt)+((rot_swid-rot_bwid)/4*2)+rotpln1,a3
  1543.     move.l    a3,a4
  1544.     add.l    #rotpic2-rotpic1,a4
  1545.  
  1546.     move.w    #0,$64(a6)            ;bltamod
  1547.     move.w    #rot_swid-rot_bwid,$66(a6)    ;bltdmod
  1548.  
  1549.     move.w    #$09f0,$40(a6)        ;bltcon0
  1550.     move.w    #0,$42(a6)            ;bltcon1
  1551.  
  1552.     move.w    #rot_blit-1,d3        ;bck opslaan
  1553. rot.f
  1554.     move.l    a2,$50(a6)            ;bltapt
  1555.     move.l    a3,$54(a6)            ;bltdpt
  1556.     move.w    #64*(rot_bhgt/rot_blit)*rot_dpt+(rot_bwid/2),$58(a6);bltsize
  1557.     bsr    rotwit
  1558.  
  1559.     move.l    a2,$50(a6)            ;bltapt
  1560.     move.l    a4,$54(a6)            ;bltdpt
  1561.     move.w    #64*(rot_bhgt/rot_blit)*rot_dpt+(rot_bwid/2),$58(a6);bltsize
  1562.     bsr    rotwit
  1563.  
  1564.     add.l    #(rot_bhgt/rot_blit)*rot_dpt*rot_bwid,a2
  1565.     add.l    #(rot_bhgt/rot_blit)*rot_dpt*rot_swid,a3
  1566.     add.l    #(rot_bhgt/rot_blit)*rot_dpt*rot_swid,a4
  1567.     dbra    d3,rot.f
  1568.  
  1569.     bra    rot.c
  1570.     
  1571. rot.clean
  1572.     lea    ((rot_shgt-rot_bhgt)/2*rot_swid*rot_dpt)+((rot_swid-rot_bwid)/4*2)+rotpln1,a3
  1573.     move.l    a3,a4
  1574.     add.l    #rotpic2-rotpic1,a4
  1575.  
  1576.     move.w    #0,$042(a6)
  1577.     move.w    #$100+$f0,$040(a6)
  1578.  
  1579.     move.w    #rot_swid-rot_bwid,$064(a6)
  1580.     move.w    #rot_swid-rot_bwid,$066(a6)
  1581.  
  1582.     move.w    #0,$074(a6)        ;a dat
  1583.     move.l    #0,$044(a6)        ;mask
  1584.  
  1585.     move.w    #rot_blit-1,d0
  1586. rot.blit1
  1587.     move.l    a3,$054(a6)        ;destination
  1588.     move.w    #((rot_bhgt/rot_blit)*rot_dpt)*64+(rot_bwid/2),$058(a6)
  1589.     bsr    rotwit
  1590.  
  1591.     move.l    a4,$054(a6)        ;destination
  1592.     move.w    #((rot_bhgt/rot_blit)*rot_dpt)*64+(rot_bwid/2),$058(a6)
  1593.     bsr    rotwit
  1594.  
  1595.     add.l    #(rot_bhgt/rot_blit)*rot_dpt*rot_swid,a3
  1596.     add.l    #(rot_bhgt/rot_blit)*rot_dpt*rot_swid,a4
  1597.  
  1598.     dbra    d0,rot.blit1
  1599.  
  1600. rot.c
  1601.     tst.l    var_obj1(a0)    ;object ?
  1602.     beq    rot.a
  1603.  
  1604.     move.l    var_obj1(a0),a1    ;object halen
  1605.     clr.l    var_obj1(a0)    ;en wissen
  1606.  
  1607.     move.w    pic_dpt(a1),d1    ;zelfde depth ?
  1608.     cmp.w    #rot_dpt,d1
  1609.     bgt    rot.a
  1610.     
  1611.     lea    rottab,a3        ;object tabel
  1612. rot.cb
  1613.     tst.l    obj_stat(a3)    ;object al aan ?
  1614.     bne    rot.ca
  1615.  
  1616.     move.w    pic_wid(a1),2+obj_wid(a3)
  1617.     move.w    pic_hgt(a1),2+obj_hgt(a3)
  1618.  
  1619.     move.w    pic_dpt(a1),2+obj_dpt(a3)
  1620.  
  1621.     move.w    pic_ani(a1),2+obj_anum(a3)
  1622.     move.w    var_anispd1(a0),2+obj_aspd(a3)
  1623.     move.w    var_anitel1(a0),2+obj_apos(a3)
  1624.     
  1625. ;    lea    pic_pal(a1),a2    ;palette
  1626. ;    move.w    pic_palnum(a1),d0
  1627. ;    lea    rotpal1,a0        ;palettes
  1628. ;    move.l    a0,a4
  1629. ;    add.l    #rotpic2-rotpic1,a4
  1630. ;rot.i
  1631. ;    move.w    (a2),(a0)+
  1632. ;    move.w    (a2)+,(a4)+
  1633. ;    dbra    d0,rot.i        ;a2 = source plane !
  1634.  
  1635.     lea    pic_raw(a1),a2    ;raw
  1636.     move.l    a2,obj_raw(a3)    ;plane
  1637.  
  1638.     move.l    obj_wid(a3),d0
  1639.     move.l    obj_hgt(a3),d1
  1640.     muls    d1,d0
  1641.     move.l    obj_dpt(a3),d1
  1642.     muls    d1,d0
  1643.     add.l    d0,a2
  1644.     move.l    a2,obj_rawm(a3)    ;plane mask
  1645.  
  1646.     move.l    #1,obj_stat(a3)    ;object aan
  1647.  
  1648.     clr.l    d1        ;info ombouwen
  1649.     move.w    d7,d1
  1650.     divs    #16384,d1
  1651.     and.l    #$ffff,d1
  1652.     move.l    d1,d6        ;sinusspeed (4)
  1653.     muls    #16384,d1
  1654.     sub.w    d1,d7
  1655.  
  1656.     move.w    d7,d1
  1657.     divs    #2048,d1
  1658.     and.l    #$ffff,d1
  1659.     move.l    d1,d5        ;sinussize (8)
  1660.     muls    #2048,d1
  1661.     sub.w    d1,d7
  1662.  
  1663.     move.w    d7,d1
  1664.     divs    #64,d1
  1665.     and.l    #$ffff,d1
  1666.     move.l    d1,d4        ;sinustype (32)
  1667.     muls    #64,d1
  1668.     sub.w    d1,d7
  1669.  
  1670.     move.w    d7,d1
  1671.     divs    #9,d1
  1672.     and.l    #$ffff,d1
  1673.     move.l    d1,d3        ;sinuscentre (64)
  1674.     muls    #9,d1
  1675.     sub.w    d1,d7
  1676.  
  1677.     muls    #sintab_l,d4    ;sinustype
  1678.     lea    sintab,a4
  1679.     add.l    d4,a4
  1680.     lea    obj_xsin(a3),a2
  1681.     move.w    #sintab_l-1,d0
  1682. rot.d
  1683.     move.b    (a4)+,(a2)+
  1684.     dbra    d0,rot.d
  1685.     
  1686.     muls    #4,d6
  1687.     add.l    #1,d6
  1688.     move.l    obj_xstp(a3),d0    ;sinusspeed
  1689.     muls    d6,d0
  1690.     move.l    d0,obj_xstp(a3)
  1691.     move.l    obj_ystp(a3),d0    ;sinuspeed
  1692.     muls    d6,d0
  1693.     move.l    d0,obj_ystp(a3)
  1694.  
  1695.     lea    rotsiztab,a4
  1696.     lsl.l    #2,d5        ;*4
  1697.     move.l    (a4,d5),d5        ;sinusize
  1698.     move.l    d5,obj_xsiz(a3)
  1699.     move.l    d5,obj_ysiz(a3)
  1700.  
  1701.     muls    #rot_xstp,d3    ;sinucentre x
  1702.     add.l    d3,obj_ymid(a3)
  1703.     muls    #rot_ystp,d7    ;sinucentre y
  1704.     add.l    d7,obj_xmid(a3)
  1705.  
  1706.     bra    rot.a
  1707.     
  1708. rot.ca
  1709.     add.l    #rottab_l,a3
  1710.     lea    rottab.e,a4
  1711.     cmp.l    a3,a4
  1712.     bne    rot.cb
  1713.  
  1714. rot.a
  1715.     bsr    rotrem
  1716.     bsr    rotset
  1717. rot.end
  1718.     tst.l    rotbckpln-rot(a5)    ;background wissen
  1719.     beq    rot.nobuf
  1720.  
  1721.     lea    rotpic1,a0
  1722.     add.l    rotbuf-rot(a5),a0
  1723.     eor.l    #rotpln2-rotpln1,rotbuf-rot(a5)    ;double playfield
  1724.     bra    rot.buf
  1725. rot.nobuf
  1726.     lea    rotpic1,a0
  1727.     move.l    rotbuf-rot(a5),d7
  1728. ;    eor.l    #rotpln2-rotpln1,d7
  1729.     add.l    d7,a0
  1730. rot.buf
  1731.     movem.l    (sp)+,d1-d7/a1-a6
  1732.     rts
  1733.  
  1734. rotset
  1735.     movem.l    d0-d7/a0-a6,-(sp)
  1736.     lea    (rottab.e-rottab_l),a0
  1737.     move.w    #rot_objnum-1,d0
  1738. rotset.bb
  1739.     bsr    rotobj        ;set object op scherm
  1740.     sub.l    #rottab_l,a0
  1741.     dbra    d0,rotset.bb
  1742.     movem.l    (sp)+,d0-d7/a0-a6
  1743.     rts
  1744.     
  1745. rotrem
  1746.     movem.l    d0-d7/a0-a6,-(sp)
  1747.     tst.l    rotbckpln-rot(a5)
  1748.     beq    rotrem.a
  1749.     lea    rottab,a0
  1750.     move.w    #rot_objnum-1,d0
  1751. rotrem.bb
  1752.     bsr    rotbck        ;remove object op scherm
  1753.     add.l    #rottab_l,a0
  1754.     dbra    d0,rotrem.bb
  1755. rotrem.a
  1756.     movem.l    (sp)+,d0-d7/a0-a6
  1757.     rts
  1758.     
  1759. rotcln
  1760.     movem.l    d0-d7/a0-a6,-(sp)
  1761.     lea    rottab,a0
  1762.     move.w    #rot_objnum-1,d0
  1763. rotcln.bb
  1764.     clr.l    obj_stat(a0)
  1765.     add.l    #rottab_l,a0
  1766.     dbra    d0,rotcln.bb
  1767.     movem.l    (sp)+,d0-d7/a0-a6
  1768.     rts
  1769.     
  1770. rotobj
  1771.     movem.l    d0-d7/a0-a6,-(sp)    ;a0=rotobj info
  1772.  
  1773.     tst.l    obj_stat(a0)
  1774.     beq    rotobj.bb
  1775.  
  1776.     bsr    rotsin
  1777.  
  1778.     move.l    obj_xpos(a0),d0    ;d0=xpos
  1779.     move.l    obj_ypos(a0),d1    ;d1=ypos
  1780.     
  1781.     lea    rotpln1,a1
  1782.     add.l    rotbuf-rot(a5),a1
  1783.  
  1784.     move.l    d0,d2
  1785.     lsr.l    #4,d0        ;ruwe xpos
  1786.     lsl.l    #1,d0
  1787.     add.l    d0,a1
  1788.  
  1789.     muls    #rot_swid*rot_dpt,d1    ;ypos
  1790.     add.l    d1,a1
  1791.  
  1792.     move.l    obj_wid(a0),d6    ;bltsize berekenen
  1793.     lsr.w    #1,d6        ;/2
  1794.     move.l    obj_hgt(a0),d5
  1795.     muls    2+obj_dpt(a0),d5
  1796.     lsl.w    #6,d5        ;*64 voor bltsize
  1797.     add.w    d5,d6
  1798.     
  1799.     lsl.l    #3,d0        ;bitscroll verder bereken
  1800.     sub.l    d0,d2
  1801.     lsl.w    #8,d2
  1802.     lsl.w    #4,d2
  1803.     move.w    d2,$42(a6)        ;bltcon1
  1804.     add.w    #$0fca,d2
  1805.     move.w    d2,$40(a6)        ;bltcon0
  1806.  
  1807. rotobj.da
  1808.     move.l    obj_apos(a0),d7
  1809.     move.l    obj_aspd(a0),d5
  1810.     divs    d5,d7
  1811.     and.l    #$ffff,d7
  1812.     cmp.w    2+obj_anum(a0),d7
  1813.     blt    rotobj.ea
  1814.     clr.l    obj_apos(a0)
  1815.     bra    rotobj.da
  1816. rotobj.ea
  1817.     move.l    obj_wid(a0),d5    ;breedte
  1818.     muls    2+obj_hgt(a0),d5    ;hoogte
  1819.     muls    2+obj_dpt(a0),d5    ;plnnumes
  1820.     muls    d7,d5        ;anipos
  1821.     lsl.l    #1,d5        ;+mask
  1822.     
  1823.     move.l    obj_raw(a0),a4    ;obj picture
  1824.     add.l    d5,a4
  1825.     move.l    obj_rawm(a0),a3
  1826.     add.l    d5,a3
  1827.  
  1828.     add.l    #1,obj_apos(a0)
  1829.     
  1830.     move.l    #rot_swid,d7
  1831.     sub.l    obj_wid(a0),d7
  1832.     move.w    d7,$60(a6)        ;bltcmod
  1833.     move.w    d7,$66(a6)        ;bltdmod
  1834.  
  1835.     move.w    #0,$62(a6)        ;bltbmod
  1836.     move.w    #0,$64(a6)        ;bltamod
  1837.  
  1838. rotobj.a
  1839.     move.l    a1,$48(a6)        ;bltcpt
  1840.     move.l    a4,$4c(a6)        ;bltbpt
  1841.     move.l    a3,$50(a6)        ;bltapt
  1842.     move.l    a1,$54(a6)        ;bltdpt
  1843.  
  1844.     move.w    d6,$58(a6)        ;bltsize
  1845.     bsr    rotwit
  1846.  
  1847. rotobj.bb
  1848.     movem.l    (sp)+,d0-d7/a0-a6
  1849.     rts
  1850.  
  1851. rotbck
  1852.     movem.l    d0-d7/a0-a6,-(sp)
  1853.  
  1854.     tst.l    obj_stat(a0)
  1855.     beq    rotbck.bb
  1856.     
  1857.     move.l    rotbckpln-rot(a5),a4    ;source
  1858.     sub.l    #(((rot_shgt-rot_bhgt)/2)*rot_bwid*rot_dpt)+((rot_swid-rot_bwid)/4*2),a4
  1859.     lea    rotpln1,a1
  1860.  
  1861.     add.l    rotbuf-rot(a5),a1    ;destination
  1862.  
  1863.     move.l    obj_xold(a0),d0
  1864.     lsr.l    #4,d0
  1865.     lsl.l    #1,d0
  1866.     add.l    d0,a4
  1867.     add.l    d0,a1
  1868.     move.l    obj_yold(a0),d0
  1869.     move.l    d0,d1
  1870.     muls    #rot_bwid*rot_dpt,d0
  1871.     add.l    d0,a4
  1872.     muls    #rot_swid*rot_dpt,d1
  1873.     add.l    d1,a1
  1874.     
  1875.     move.l    #rot_bwid,d7
  1876.     sub.l    obj_wid(a0),d7
  1877.     move.w    d7,$64(a6)        ;bltamod
  1878.  
  1879.     move.l    #rot_swid,d7
  1880.     sub.l    obj_wid(a0),d7
  1881.     move.w    d7,$66(a6)        ;bltdmod
  1882.  
  1883.     clr.w    $42(a6)        ;bltcon1
  1884.     move.w    #$09f0,$40(a6)    ;bltcon0
  1885.  
  1886.     move.l    obj_wid(a0),d6    ;bltsize berekenen
  1887.     lsr.w    #1,d6        ;/2
  1888.     move.l    obj_hgt(a0),d5
  1889.     muls    2+obj_dpt(a0),d5
  1890.     lsl.w    #6,d5        ;*64
  1891.     add.w    d5,d6
  1892.     
  1893. rotbck.c
  1894.     move.l    a4,$50(a6)        ;bltapt
  1895.     move.l    a1,$54(a6)        ;bltdpt
  1896.  
  1897.     move.w    d6,$58(a6)        ;bltsize
  1898.     bsr    rotwit
  1899.  
  1900. rotbck.bb
  1901.     movem.l    (sp)+,d0-d7/a0-a6
  1902.     rts
  1903.  
  1904. rotwit
  1905. rotwit.a
  1906.     btst    #6,($dff002).l
  1907.     bne    rotwit.a
  1908.     rts
  1909.     
  1910. rotsin
  1911.     movem.l    d0-d7/a0-a6,-(sp)
  1912.  
  1913.     move.l    obj_xsin(a0),d2
  1914.     move.l    obj_ysin(a0),d3
  1915.  
  1916.     lea    dat.sin,a1
  1917.  
  1918.     move.w    (a1,d2),d0        ;x sin pos
  1919.     ext.l    d0
  1920.     move.l    obj_xsiz(a0),d4
  1921.     divs    d4,d0        ;x circel grote
  1922.     add.l    obj_xmid(a0),d0    ;x centrum pos
  1923.     and.l    #$ffff,d0
  1924.  
  1925.     add.l    obj_xstp(a0),d2    ;x sin stap grote
  1926.  
  1927.     cmp.l    obj_xend(a0),d2
  1928.     blt    rotsin.aa
  1929.     move.l    obj_xstr(a0),d2
  1930. rotsin.aa
  1931.     cmp.l    obj_xstr(a0),d2
  1932.     bge    rotsin.ab
  1933.     move.l    obj_xend(a0),d2
  1934. rotsin.ab
  1935.  
  1936.     move.w    (a1,d3),d1        ;y sin pos
  1937.     ext.l    d1
  1938.     move.l    obj_ysiz(a0),d4    ;y circel grote
  1939.     divs    d4,d1        ;y circel grote
  1940.     add.l    obj_ymid(a0),d1    ;y centrum pos
  1941.     and.l    #$ffff,d1
  1942.  
  1943.     add.l    obj_ystp(a0),d3    ;y sin stap grote
  1944.  
  1945.     cmp.l    obj_yend(a0),d3
  1946.     blt    rotsin.ba
  1947.     move.l    obj_ystr(a0),d3
  1948. rotsin.ba
  1949.     cmp.l    obj_ystr(a0),d3
  1950.     bge    rotsin.bb
  1951.     move.l    obj_yend(a0),d3
  1952. rotsin.bb
  1953.     move.l    d2,obj_xsin(a0)
  1954.     move.l    d3,obj_ysin(a0)
  1955.  
  1956.     move.l    obj_wid(a0),d2    ;x centreren
  1957.     sub.l    #2,d2        ;- blitter ruimte
  1958.     lsl.l    #2,d2
  1959.     sub.l    d2,d0
  1960.     move.l    obj_hgt(a0),d2    ;y centreren
  1961.     lsr.l    #1,d2
  1962.     sub.l    d2,d1
  1963.  
  1964.     cmp.l    #0,d0        ;buiten scherm ?
  1965.     bge    rotsin.za
  1966.     clr.l    d0
  1967. rotsin.za
  1968.     move.l    #rot_swid*8,d7
  1969.     move.l    obj_wid(a0),d6
  1970.     lsl.l    #3,d6        ;*8
  1971.     sub.l    d6,d7
  1972.     cmp.l    d7,d0
  1973.     ble    rotsin.zb
  1974.     move.l    d7,d0
  1975. rotsin.zb
  1976.     
  1977.     cmp.l    #0,d1
  1978.     bge    rotsin.zc
  1979.     clr.l    d1
  1980. rotsin.zc
  1981.     move.l    #rot_shgt,d7
  1982.     sub.l    obj_hgt(a0),d7
  1983.     cmp.l    d7,d1
  1984.     ble    rotsin.zd
  1985.     move.l    d7,d1
  1986. rotsin.zd
  1987.     
  1988.     move.l    obj_xpos(a0),obj_xold(a0)    ;oldpos
  1989.     move.l    obj_ypos(a0),obj_yold(a0)
  1990.  
  1991.     move.l    d0,obj_xpos(a0)
  1992.     move.l    d1,obj_ypos(a0)
  1993. rotsin.z
  1994.     movem.l    (sp)+,d0-d7/a0-a6
  1995.     rts
  1996.  
  1997. rotbuf    dc.l    0
  1998. rotbckpln    dc.l    0
  1999.  
  2000. obj_xpos    equ    $0
  2001. obj_ypos    equ    $4
  2002. obj_apos    equ    $8
  2003. obj_aspd    equ    $0c
  2004. obj_anum    equ    $10
  2005. obj_wid    equ    $14
  2006. obj_hgt    equ    $18
  2007. obj_raw    equ    $1c
  2008. obj_rawm    equ    $20
  2009. obj_dpt    equ    $24
  2010.  
  2011. obj_xold    equ    $28
  2012. obj_yold    equ    $2c
  2013. obj_xsin    equ    $30
  2014. obj_xsiz    equ    $34
  2015. obj_xmid    equ    $38
  2016. obj_xstp    equ    $3c
  2017. obj_xstr    equ    $40
  2018. obj_xend    equ    $44
  2019. obj_ysin    equ    $48
  2020. obj_ysiz    equ    $4c
  2021. obj_ymid    equ    $50
  2022. obj_ystp    equ    $54
  2023. obj_ystr    equ    $58
  2024. obj_yend    equ    $5c
  2025. obj_stat    equ    $60
  2026.  
  2027.  
  2028. ;        x-pos    y-pos    animpos    animspeed    animnum
  2029. rottab
  2030.     dc.l    0,    0,    0,    0,    0
  2031.  
  2032. ;        width    hight    picture    picturemask
  2033.     dc.l    0,    0,    0,    0
  2034.  
  2035. ;        plnnum    xold    yold
  2036.     dc.l    0,    0,    0
  2037.  
  2038. ;        xsin    xsiz    xmid    xstp    xstr    xend
  2039.     dc.l    0,    500,    256,    2,    0,    720*2
  2040.  
  2041. ;        ysin    ysiz    ymid    ystp    ystr    yend
  2042.     dc.l    180*2,    500,    192,    2,    0,    720*2
  2043.  
  2044. ;        status
  2045.     dc.l    0
  2046.  
  2047. rottab.t
  2048. rottab_l    equ    rottab.t-rottab
  2049.  
  2050.     rept    rot_objnum-1
  2051.     dc.l    0,    0,    0,    0,    0
  2052.     dc.l    0,    0,    0,    0
  2053.     dc.l    0,    0,    0
  2054.     dc.l    0,    500,    256,    2,    0,    720*2
  2055.     dc.l    180*2,    500,    192,    6,    0,    720*2
  2056.     dc.l    0
  2057.     endr
  2058. rottab.e
  2059.  
  2060. rotsiztab
  2061.     ifeq    rot_vewh-0
  2062.     dc.l    1300/1,1040/1,832/1,665/1
  2063.     dc.l    532/1,425/1,340/1,272/1        ;1,25
  2064.     endc
  2065.     ifeq    rot_vewh-$8000
  2066.     dc.l    1300/2,1040/2,832/2,665/2
  2067.     dc.l    532/2,425/2,340/2,272/2        ;1,25
  2068.     endc
  2069.  
  2070. sintab
  2071.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.    1
  2072.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2073. sintab.t
  2074. sintab_l    equ    sintab.t-sintab
  2075.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),2,0,1440    ;O    2
  2076.     dc.l    360,1300,(rot_shgt/2)-(rot_ystp*3),2,0,1440
  2077.  
  2078.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),4,0,1440    ;8    3
  2079.     dc.l    360,1300,(rot_shgt/2)-(rot_ystp*3),2,0,1440
  2080.  
  2081.     dc.l    360,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),2,0,1440    ;(X)    4
  2082.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),4,0,1440
  2083.  
  2084.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),4,0,1440    ;complex    5
  2085.     dc.l    360,1300,(rot_shgt/2)-(rot_ystp*3),6,0,1440
  2086.  
  2087.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;|    6
  2088.     dc.l    360,1300,(rot_shgt/2)-(rot_ystp*3),2,0,1440
  2089.  
  2090.     dc.l    360,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),2,0,1440    ;-    7
  2091.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2092.  
  2093.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;/\ Tip    8
  2094.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),2,720,1440
  2095.  
  2096.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;\/ Tip    9
  2097.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),2,0,720
  2098.  
  2099.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),2,720,1440    ;< Tip    10
  2100.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2101.  
  2102.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),2,0,720    ;> Tip    11
  2103.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,720
  2104.  
  2105.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.    12
  2106.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2107.  
  2108.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.    13
  2109.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2110.  
  2111.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.    14
  2112.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2113.  
  2114.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.    15
  2115.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2116.  
  2117.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.    16
  2118.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2119.  
  2120.  
  2121.  
  2122.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.    17
  2123.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2124.  
  2125.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),-2,0,1440    ;O    18
  2126.     dc.l    360,1300,(rot_shgt/2)-(rot_ystp*3),-2,0,1440
  2127.  
  2128.     rept    32-18
  2129.     dc.l    000,1300,(rot_swid*4)-(rot_xstp*4)+(rot_cen*8),0,0,1440    ;.
  2130.     dc.l    000,1300,(rot_shgt/2)-(rot_ystp*3),0,0,1440
  2131.     endr
  2132. sintab.e
  2133.  
  2134.  
  2135.     cnop    0,2
  2136. dat.sin    incbin    'videotracker:bin/objsin.bin'
  2137. dat.sin.e
  2138.  
  2139. ;pic_wid    equ    4        ;wide in bytes
  2140. ;pic_hgt    equ    6        ;hoogte
  2141. ;pic_dpt    equ    8        ;number planes
  2142. ;pic_ani    equ    10        ;aantal effes (anim)
  2143. ;pic_vew    equ    12        ;viewmode
  2144. ;pic_cycstr    equ    14        ;cycle start (*4)
  2145. ;pic_cycend    equ    15        ;cycle end (*4)
  2146. ;pic_cycspd    equ    16        ;cycle speed (*4)
  2147. ;pic_cycadd    equ    17        ;cycle add (*4)
  2148. ;pic_palnum    equ    30        ;aantal kleuren
  2149. ;pic_pal    equ    32        ;palette start
  2150. ;pic_palsiz    equ    256*2        ;vaste palette size
  2151. ;pic_raw    equ    pic_pal+pic_palsiz    ;palette start
  2152.  
  2153.  
  2154.     cnop    0,2
  2155. rotpic1
  2156.     dc.l    'PICT'
  2157.     dc.w    rot_swid,rot_shgt,rot_dpt,1,rot_vewh+rot_vewl
  2158.     dc.b    0,0,0,0
  2159.     dc.b    0,0,0,0
  2160.     dc.b    0,0,0,0
  2161.     dc.b    0,0,0,0
  2162.  
  2163.     ifeq    1-rot_dpt
  2164.     dc.w    2-1
  2165. rotpal1
  2166.     dc.w    $000,$fff
  2167.     ds.w    256-2
  2168.     endc
  2169.  
  2170.     ifeq    2-rot_dpt
  2171.     dc.w    4-1
  2172. rotpal1
  2173.     dc.w    $000,$555,$aaa,$fff
  2174.     ds.w    256-4
  2175.     endc
  2176.  
  2177.     ifeq    3-rot_dpt
  2178.     dc.w    8-1
  2179. rotpal1
  2180.     dc.w    $000,$333,$555,$777,$999,$bbb,$ddd,$fff
  2181.     ds.w    256-8
  2182.     endc
  2183.  
  2184.     ifeq    4-rot_dpt
  2185.     dc.w    16-1
  2186. rotpal1
  2187.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  2188.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  2189.     ds.w    256-16
  2190.     endc
  2191.  
  2192.     ifeq    5-rot_dpt
  2193.     dc.w    32-1
  2194. rotpal1
  2195.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  2196.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  2197.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  2198.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  2199.     ds.w    256-32
  2200.     endc
  2201.  
  2202.     ifeq    6-rot_dpt
  2203.     dc.w    32-1
  2204. rotpal1
  2205.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  2206.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  2207.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  2208.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  2209.     ds.w    256-32
  2210.     endc
  2211.  
  2212. rotpln1
  2213.     ds.b    rot_dpt*rot_swid*rot_shgt
  2214.  
  2215.  
  2216.     cnop    0,2
  2217. rotpic2
  2218.     dc.l    'PICT'
  2219.     dc.w    rot_swid,rot_shgt,rot_dpt,1,rot_vewh+rot_vewl
  2220.     dc.b    0,0,0,0
  2221.     dc.b    0,0,0,0
  2222.     dc.b    0,0,0,0
  2223.     dc.b    0,0,0,0
  2224.  
  2225.     ifeq    1-rot_dpt
  2226.     dc.w    2-1
  2227. rotpal2
  2228.     dc.w    $000,$fff
  2229.     ds.w    256-2
  2230.     endc
  2231.  
  2232.     ifeq    2-rot_dpt
  2233.     dc.w    4-1
  2234. rotpal2
  2235.     dc.w    $000,$555,$aaa,$fff
  2236.     ds.w    256-4
  2237.     endc
  2238.  
  2239.     ifeq    3-rot_dpt
  2240.     dc.w    8-1
  2241. rotpal2
  2242.     dc.w    $000,$333,$555,$777,$999,$bbb,$ddd,$fff
  2243.     ds.w    256-8
  2244.     endc
  2245.  
  2246.     ifeq    4-rot_dpt
  2247.     dc.w    16-1
  2248. rotpal2
  2249.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  2250.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  2251.     ds.w    256-16
  2252.     endc
  2253.  
  2254.     ifeq    5-rot_dpt
  2255.     dc.w    32-1
  2256. rotpal2
  2257.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  2258.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  2259.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  2260.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  2261.     ds.w    256-32
  2262.     endc
  2263.  
  2264.     ifeq    6-rot_dpt
  2265.     dc.w    32-1
  2266. rotpal2
  2267.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  2268.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  2269.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  2270.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  2271.     ds.w    256-32
  2272.     endc
  2273.  
  2274. rotpln2
  2275.     ds.b    rot_dpt*rot_swid*rot_shgt
  2276.  
  2277. rot.e
  2278.  
  2279. ;**********************************************************************
  2280.  
  2281. ;and here are the incbin-files....
  2282.  
  2283.         ifd    rout
  2284.         cnop    0,2
  2285. rotincobj
  2286.         incbin    'videotracker:effect/trianglef32b_2.obj'
  2287.         cnop    0,2
  2288. rotincbck
  2289.         incbin    'videotracker:effect/creator_l2.bck'
  2290.         endc
  2291.         
  2292.